﻿namespace Creek.UI.EFML.Base
{
    using System;

    public struct Tag : IEquatable<Tag>
    {
        #region Fields

        private readonly string Content;

        #endregion

        #region Constructors and Destructors

        internal Tag(string v)
        {
            this.Content = v;
        }

        #endregion

        #region Public Properties

        public static Tag Audio
        {
            get
            {
                return new Tag("audio");
            }
        }

        public static Tag Break
        {
            get
            {
                return new Tag("break");
            }
        }

        public static Tag Button
        {
            get
            {
                return new Tag("button");
            }
        }

        public static Tag Checkbox
        {
            get
            {
                return new Tag("checkbox");
            }
        }

        public static Tag Div
        {
            get
            {
                return new Tag("div");
            }
        }

        public static Tag Dropdown
        {
            get
            {
                return new Tag("dropdown");
            }
        }

        public static Tag Embbed
        {
            get
            {
                return new Tag("embbed");
            }
        }

        public static Tag Flash
        {
            get
            {
                return new Tag("flash");
            }
        }

        public static Tag Group
        {
            get
            {
                return new Tag("group");
            }
        }

        public static Tag Image
        {
            get
            {
                return new Tag("image");
            }
        }

        public static Tag Label
        {
            get
            {
                return new Tag("label");
            }
        }

        public static Tag Line
        {
            get
            {
                return new Tag("line");
            }
        }

        public static Tag Link
        {
            get
            {
                return new Tag("link");
            }
        }

        public static Tag MailTextbox
        {
            get
            {
                return new Tag("mail");
            }
        }

        public static Tag Navigator
        {
            get
            {
                return new Tag("navigator");
            }
        }

        public static Tag Passwordbox
        {
            get
            {
                return new Tag("passwordbox");
            }
        }

        public static Tag Radiobutton
        {
            get
            {
                return new Tag("radiobutton");
            }
        }

        public static Tag Textbox
        {
            get
            {
                return new Tag("textbox");
            }
        }

        public static Tag Video
        {
            get
            {
                return new Tag("video");
            }
        }

        public static Tag WebView
        {
            get
            {
                return new Tag("webview");
            }
        }

        #endregion

        #region Public Methods and Operators

        public static Tag FromString(string s)
        {
            return new Tag(s);
        }

        public bool Equals(Tag other)
        {
            return this.Content.Equals(other.Content);
        }

        public override int GetHashCode()
        {
            return this.Content.GetHashCode();
        }

        public override string ToString()
        {
            return this.Content;
        }

        #endregion
    }
}